home *** CD-ROM | disk | FTP | other *** search
- /*<Header>==============================================================
- *
- * WIZME / "WIZ_MEM.C" WIZリンクソフト / メモリ管理ブロック
- *
- * [ EIN(tm) project : サンプルプログラム ]
- *
- * COPYRIGHT Nam 1995, All rights reserved.
- *
- * 配付・組込・改変・商利用すべて自由。ただし無保証っす
- *
- *-----------------------------------------------------------------------
- * V1.0L01α 95.08.04/Nam プロトタイプ(『鉄鍋のジャン』2巻発売記念)
- * V1.0L02α 95.08.08/Nam CSVメモ→テキスト変換
- * V1.0L02β 95.08.10/Nam Zaurus特殊文字(2バイト半角)コンバート
- * V1.0L02γ 95.08.17/Nam Zaurus特殊文字コンバートのdebug(ひえ~)
- *</Header>==============================================================*/
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <snd.h>
- #include <winb.h>
- #include <te.h>
- #include <fntb.h>
- #include <gui.h>
- #include <egb.h>
- //#include <file_dlg.h>
- //#include <tifflib.h>
- #include <msdos.cf>
- #include <loader.h>
- #include <math.h>
- #include <io.h>
- //#include <guidbg.h>
- //#include <wgb.h>
- // ※ ここまでが平均的に使用されるヘッダ
-
- #include "..\ein\eintm.h" // EIN(TM)関連ライブラリのヘッダ
-
- #include <pocket.h> // このサンプルでのみ必要
-
- #define ERROR (-1)
- #ifndef NOERR
- #define NOERR (0)
- #endif
-
- extern int GV_apliLot; // malloc用
-
- extern char fname[]; // 送受信ファイル名
-
- extern char irBuf[]; // IR送受信用バッファ
- extern char repBuf[]; // IR送受信用リピートバッファ
-
-
- char *termBuf = NULL; // 送受信元データバッファ
- int termBufSize = 0; // 元データバッファサイズ(bytes)
- int termSize = 0; // 元データバッファ内データサイズ(bytes)
-
- // バッファをpurge
- int WL_purgeBuf()
- {
- if ( termBuf != NULL ){
- TL_freeMemory(termBuf, termBufSize);
- }
- termBuf = NULL;
- termBufSize = 0;
- termSize = 0;
- return NOERR;
- }
-
- // 元バッファをmalloc
- int WL_mallocBuf( int size )
- {
- if ( termSize > 0 ){
- WL_purgeBuf();
- }
- if ( size < 1 ){
- return ERROR;
- }
- size = ((size / 1024)+1) * 1024;
- if ( (termBuf=TL_mallocMemory(GV_apliLot, size)) == NULL ){
- #ifdef DEBUG
- printf("WL_mallocBuf(%s): Can't malloc!\n", size);
- #endif
- return ERROR;
- }
- termBufSize = size;
-
- return NOERR;
- }
-
- // 元バッファをshrink
- int WL_shrinkBuf()
- {
- int osize, nsize;
- char *tbuf;
-
- if ( (termSize < 1) || (termBufSize < 1) ){
- return ERROR;
- }
- osize = ((termBufSize / 1024)+1) * 1024;
- nsize = ((termSize / 1024)+1) * 1024;
- // 違いが1024byte未満なら縮めてもメリットが無い
- if ( osize == nsize ){
- return NOERR;
- }
- // ワークのメモリを取れなかった
- if ( (tbuf=TL_mallocMemory(GV_apliLot, nsize)) == NULL ){
- return NOERR;
- }
- #ifdef DEBUG
- printf("WL_shrinkBuf() %d->%d\n", osize, nsize);
- #endif
- // ワークにバッファ内容を転送
- memcpy( tbuf, termBuf, termSize );
- // 古いバッファをpurge
- TL_freeMemory(termBuf, termBufSize);
- termBufSize = nsize;
- termBuf = tbuf;
-
- return NOERR;
- }
-
- // バッファ末尾に0x1aが無ければ追加する
- int WL_putEOF()
- {
- char *dst;
-
- if ( termBuf == NULL ){
- return ERROR;
- }
- dst = (char *)termBuf + termSize -1;
- if ( dst[0] == 0x1a ){
- #ifdef DEBUG
- printf("WL_putEOF(): 0x1a already exist.\n");
- #endif
- return NOERR;
- }
- if ( termSize >= termBufSize ){
- #ifdef DEBUG
- printf("WL_putEOF(): Buffer size over.\n");
- #endif
- return ERROR;
- }
- // バッファ末尾に0x1aを追加
- dst[1] = 0x1a;
- termSize++;
- return NOERR;
- }
-
- // 元バッファに指定サイズ分のデータをIRバッファから追加転送
- int WL_recBuf( int size )
- {
- char *dst, *src;
- if ( termBuf == NULL ){
- #ifdef DEBUG
- printf("WL_recBuf(%s): No buf!\n", size);
- #endif
- return ERROR;
- }
- if ( size < 17 ){
- #ifdef DEBUG
- printf("WL_recBuf(%s): too short!\n", size);
- #endif
- return ERROR;
- }
- // ヘッダ(15byte)と末尾のチェックサム(2byte)を除いて転送
- size -= 17;
- // バッファを越える転送はしないように
- if ( (termSize + size) > termBufSize ){
- size = termBufSize - termSize;
- }
- if ( size < 1 ){
- #ifdef DEBUG
- printf("WL_recBuf(): overflow!\n");
- #endif
- return ERROR;
- }
- src = (char *)irBuf + 15; // ヘッダ分をとばす
- dst = (char *)termBuf + termSize;
- memcpy( dst, src, size );
- termSize += size;
-
- #ifdef DEBUG
- printf("WL_recBuf(%x,%d)\n", dst,termSize);
- #endif
-
- return NOERR;
- }
-
- // 元バッファに指定サイズ分のデータをIRバッファから追加転送
- int WL_recRBuf( int size )
- {
- char *dst, *src;
- if ( termBuf == NULL ){
- #ifdef DEBUG
- printf("WL_recBuf(%s): No buf!\n", size);
- #endif
- return ERROR;
- }
- if ( size < 17 ){
- #ifdef DEBUG
- printf("WL_recBuf(%s): too short!\n", size);
- #endif
- return ERROR;
- }
- // ヘッダ(15byte)と末尾のチェックサム(2byte)を除いて転送
- size -= 17;
- // バッファを越える転送はしないように
- if ( (termSize + size) > termBufSize ){
- size = termBufSize - termSize;
- }
- if ( size < 1 ){
- #ifdef DEBUG
- printf("WL_recBuf(): overflow!\n");
- #endif
- return ERROR;
- }
- src = (char *)repBuf + 15; // ヘッダ分をとばす
- dst = (char *)termBuf + termSize;
- memcpy( dst, src, size );
- termSize += size;
-
- #ifdef DEBUG
- printf("WL_recBuf(%x,%d)\n", dst,termSize);
- #endif
-
- return NOERR;
- }
-
- // IRバッファ送信準備
- int WL_mkSendBuf( int flag )
- {
- #define IR_head_Len (15)
- #define IR_head_BlNo (8)
- #define IR_head_Size (13)
-
- char head[15]= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x81, 0x10,
- 0x00, 0x00, 0x01, 0x40, 0x0fe, 0x00, 0x00 };
-
- static int bufp, cnt;
- char *src, *dst;
- int i, sum, size;
-
- // お約束のErrorTrap
- if ( termBuf==NULL || termSize < 1 ){
- return -1;
- }
- // flag がFALSEなら転送条件を初期化する
- if ( flag < 1 ){
- bufp = 0;
- cnt = 1;
- return 0;
- }
- // バッファ終端なら何もしない
- if ( termSize <= bufp ){
- return 0;
- }
- // バッファを越える転送はしないように
- size = 512;
- if ( (bufp + size) > termSize ){
- size = termSize - bufp;
- }
- // ヘッダを付ける
- memcpy( irBuf, head, IR_head_Len );
- // ブロック番号を設定する(size<512なら最後のブロックなのでFFFFに)
- *(unsigned short *)( &irBuf[0] + IR_head_BlNo ) = (size == 512) ?cnt :0x0ffff;
- // データサイズを設定する
- *(unsigned short *)( &irBuf[0] + IR_head_Size ) = size;
- // データを転送する
- dst = irBuf + IR_head_Len;
- src = termBuf + bufp;
- memcpy( dst, src, size );
- cnt++;
- bufp += size;
- // チェックサムを設定する
- for( i=sum=0; i < size; i++ ){
- sum += *( dst + i );
- }
- *(unsigned short *)(&irBuf[0] + IR_head_Len + size) = sum;
-
- return (IR_head_Len + size + 2);
- }
-
- // 指定バッファの内容をセーブする
- int WL_saveFile( char *buf, int size )
- {
- FILE *fp;
- int ret = ERROR;
-
- if ( (strlen(fname)< 1) || (buf==NULL) || (size<1) ){
- return ret;
- }
- if ( (fp=EIN_fopen(fname,"wb")) == (FILE *)NULL ){
- return ret;
- }
- if ( fwrite( buf, size, 1, fp ) > 0 ){
- ret = NOERR;
- }
- fclose( fp ) ;
- return ret;
- }
-
- // 指定バッファの内容をポケットに入れる
- int WL_savePocket( char *buf, int size )
- {
- int ret = ERROR;
- if ( SCB_open()==NOERR ){
- // まずポケットの内容をクリア
- SCB_empty();
- if ( SCB_write(SCBF_CSTR,buf,size) == size ){
- SCB_seek(SCBF_CSTR, 0, SCBS_SET);
- ret = NOERR;
- }
- SCB_close();
- }
- return ret;
- }
-
- // ファイルの内容を指定バッファにロードする
- int WL_loadFile( char *buf, int size )
- {
- FILE *fp;
- int ret = ERROR;
-
- if ( (strlen(fname)< 1) || (buf==NULL) || (size<1) ){
- return ret;
- }
- if ( (fp=EIN_fopen(fname,"rb")) == (FILE *)NULL ){
- return ret;
- }
- if (fread( buf, 1, size, fp ) == size){
- ret = NOERR;
- }
- fclose( fp ) ;
- return ret;
- }
-
- // ポケットの内容を指定バッファ入れる
- int WL_loadPocket( char *buf, int size )
- {
- int ret = ERROR;
-
- if ( SCB_open()==NOERR ){
- if ( SCB_isFormatAvailable(SCBF_CSTR) > 0 ){
- SCB_seek(SCBF_CSTR, 0, SCBS_SET);
- /* データ終端まで読み込み */
- if (SCB_read(SCBF_CSTR, buf, size) == size ){
- ret = NOERR;
- }
- }
- SCB_close();
- }
- return ret;
- }
-
- // ファイルサイズを得る
- int WL_getFileSize()
- {
- FILE *fp;
- int size = -1;
-
- if ( strlen(fname)< 1 ){
- return size;
- }
- if ( (fp=EIN_fopen(fname,"rb")) == (FILE *)NULL ){
- return size;
- }
- if (fseek( fp, 0L, SEEK_END ) == 0){
- size = ftell( fp );
- }
- fclose( fp ) ;
- return size;
- }
-
- // ポケットの内容のデータサイズを得る
- int WL_getPocketSize()
- {
- int size = -1;
-
- if ( SCB_open()==NOERR ){
- size = SCB_isFormatAvailable(SCBF_CSTR);
- SCB_close();
- }
- return size;
- }
-
-
- // 元バッファのプレーンテキストから無地メモ形式へ変換
- // (`dsize'(byte) で別メモに分割する。dsize<1の時は分割しない)
- // (※実測では1037byteまではWizでも取り込めるみたいっす)
- int WL_convText2Csv( int dsize )
- {
- char str_crlf[] = { 0x0d, 0x0a, 0 };
- char str_i[] = "\"i\",\"SCRT\",\"CLAS\",\"MEM1\",\"PRF1\",\"CLSC\"";
- char str_T[] = "\"T\",\"シークレット\",\"ファイル名\",\"メモ内容\",\"印字形式\",\"分類コード\"";
- char str_Dh[]= "\"D\",\" \",,\"";
- char str_Dt[]= "\",,\" \"";
- char str_quote[] = { 0x0d, 0x0a, 0x1a, 0 };
-
- char *tmpBuf, *sp, *dp, *dp2;
- int i, d, len, rem, cnt, tsize;
-
- if ( (termBuf==NULL) || (termSize<1) ){
- return ERROR;
- }
-
- // 3倍のワークバッファを取っておく
- tsize = ( ((termSize * 3) / 1024)+1) * 1024;
- if ( (tmpBuf=TL_mallocMemory(GV_apliLot, tsize)) == NULL ){
- #ifdef DEBUG
- printf("WL_convText2Buf(%s): Can't malloc!\n", size);
- #endif
- return ERROR;
- }
- // まずヘッダその1を転送
- strcpy( tmpBuf, str_i );
- strcat( tmpBuf, str_crlf );
- // まずヘッダその2を転送
- strcat( tmpBuf, str_T );
- strcat( tmpBuf, str_crlf );
-
- strcat( tmpBuf, str_Dh );
-
- sp = (char *)termBuf;
- dp = (char *)tmpBuf + strlen( tmpBuf );
- dp2= dp;
- for ( i=0; i<termSize; i++, sp++ ){
- d = *(unsigned char *)(sp);
- len = (int)(dp - dp2); // 現在の処理済文字数
- switch ( d ){
- // 改行記号(1bute目)の時
- case 0x0d:
- // 頁先頭の時は改行は無視しないとタイトルが読めない(^^;)
- if ( len > 0 ){
- *(unsigned char *)(dp) = 0x1f;
- dp++;
- }
- break;
- // 改行記号(2bute目)の時
- case 0x0a:
- break;
- // TAB記号の時
- case 0x09:
- // 頁先頭のTABは無視しないとタイトルが読めない(^^;)
- if ( len > 0 ){
- *(unsigned char *)(dp)= 0;
- strcat( tmpBuf, " " );
- dp = (char *)tmpBuf + strlen( tmpBuf );
- }
- break;
- // 特殊文字の時
- case 0x1a:
- break;
- // 改頁記号の時
- case 0x0c:
- // 頁先頭の時は改頁は無視しないと無駄(^^;)
- if ( len > 0 ){
- // 行を変える
- *(unsigned char *)(dp)= 0;
- strcat( tmpBuf, str_Dt );
- strcat( tmpBuf, str_crlf );
- strcat( tmpBuf, str_Dh );
- dp = (char *)tmpBuf + strlen( tmpBuf );
- dp2= dp;
- }
- break;
- // `"'の時
- case 0x22:
- *(unsigned char *)(dp)= 0xde; // `゙'
- dp++;
- break;
- // `,'の時
- case 0x2c:
- *(unsigned char *)(dp)= 0x2e; // `.'
- dp++;
- break;
- // 通常の文字の場合
- default:
- *(unsigned char *)(dp)= d;
- dp++;
- break;
- }
- // 現在の総文字数をチェック
- rem = sp - (char *)termBuf; // 残り文字数
- len = (int)(dp - dp2); // 現在の処理済文字数
- if ( (dsize > 0) && ((len + rem) > dsize) ){
- len = (int)(dp - dp2);
- if ( d==0x0d || d==0x0a ){
- cnt = 160;
- } else {
- cnt = 80;
- // 漢字1byte目だったら優先(泣き別れ防止)
- if (((d)>0x080 && (d)<0x0A0)||((d)>0xDF && (d)<0x0FD)){
- cnt--;
- }
- }
- if ( (len + cnt) > dsize ){
- // 行を変える
- *(unsigned char *)(dp)= 0;
- strcat( tmpBuf, str_Dt );
- strcat( tmpBuf, str_crlf );
- strcat( tmpBuf, str_Dh );
- dp = (char *)tmpBuf + strlen( tmpBuf );
- dp2= dp;
- }
- }
- }
- *(unsigned char *)(dp) = 0;
-
- strcat( tmpBuf, str_Dt );
- strcat( tmpBuf, str_quote );
-
- // 古いバッファをpurge
- TL_freeMemory(termBuf, termBufSize);
-
- termBufSize = tsize;
- termSize = strlen(tmpBuf);
- termBuf = tmpBuf;
- #ifdef DEBUG
- printf("WL_convText2CSV(): %x %d\n", termBuf, termSize);
- #endif
-
- #ifdef DEBUG
- FILE *fp;
- if ( (fp=EIN_fopen("g:text2csv.$$$","wb")) != (FILE *)NULL ){
- fwrite( termBuf, termSize, 1, fp );
- }
- fclose( fp );
- #endif
-
- return NOERR;
- }
-
- // "MEM1" フィールドの位置を取得
- // (※データエリア末尾には必ず`0x1a'を入れておくこと)
- int WL_countCsvField( char *sp )
- {
- int flag, mcnt;
-
- // "MEM1" フィールドの位置を取得
- for ( flag=0, mcnt=0; flag==0; sp++ ){
- switch ( *(unsigned char *)(sp) ){
- // `,'の時
- case 0x2c:
- // まずカウントアップ
- mcnt++;
- // printf("+");
- // `,"MEM1"'か? (※もうちょっとエレガントに書きたいものだ)
- if ( *(unsigned char *)(sp +1) == 0x22 ){ // `"'
- if ( *(unsigned char *)(sp +2) == 'M' ){
- if ( *(unsigned char *)(sp +3) == 'E' ){
- if ( *(unsigned char *)(sp +4) == 'M' ){
- if ( *(unsigned char *)(sp +5) == '1' ){
- if ( *(unsigned char *)(sp +6) == 0x22 ){
- flag++;
- }
- }
- }
- }
- }
- }
- break;
- // 0x1aの時
- case 0x1a:
- mcnt=-1;
- flag++;
- break;
- // 通常の文字の場合
- default:
- break;
- }
- }
- return mcnt;
- }
-
- // (※データエリア末尾には必ず`0x1a'を入れておくこと)
- char *WL_searchCsvField( char *sp, int mcnt )
- {
- int flag, cnt;
-
- nextline:
- // まず `\n"M"' を探す
- for ( flag=0; flag==0; sp++ ){
- switch ( *(unsigned char *)(sp) ){
- // `\n'の時
- case 0x0a:
- // `\n"M"'か? (※もうちょっとエレガントに書きたいものだ)
- if ( *(unsigned char *)(sp +1) == 0x22 ){ // `"'
- if ( *(unsigned char *)(sp +2) == 'D' ){
- if ( *(unsigned char *)(sp +3) == 0x22 ){
- flag=1;
- }
- }
- }
- break;
- // 0x1aの時
- case 0x1a:
- flag=-1;
- break;
- // 通常の文字の場合
- default:
- break;
- }
- }
- // バッファ末まで来てしまった
- if ( flag < 0 ){
- return NULL;
- }
- // "MEM1" フィールドの位置まで飛ばす
- for ( flag=0, cnt=0; flag==0; sp++ ){
- switch ( *(unsigned char *)(sp) ){
- // `,'の時
- case 0x2c:
- // まずカウントアップ
- cnt++;
- if ( cnt == mcnt ){
- flag = 1;
- }
- break;
- // \nの時
- case 0x0a:
- goto nextline;
- // 0x1aの時
- case 0x1a:
- flag=-1;
- break;
- // 通常の文字の場合
- default:
- break;
- }
- }
- // バッファ末まで来てしまった
- if ( flag < 0 ){
- return NULL;
- }
- return sp;
- }
-
- // 元バッファの無地メモ形式からプレーンテキストへ変換
- int WL_convCsv2Text()
- {
- char *tmpBuf, *sp, *dp, *sp2;
- int mcnt, flag, flag2, d, d2, tsize, page;
-
- // お約束のErrorTrap
- if ( (termBuf==NULL) || (termSize<1) ){
- return ERROR;
- }
- // CSVでなかったらERROR (バッファ先頭から `"i",' の文字列と照合)
- if ( termBuf[0]!='"' || (termBuf[1]!='i' && termBuf[1]!='I') ||
- termBuf[2]!='"' || termBuf[3]!=',' ){
- return ERROR;
- }
- sp = (char *)termBuf;
- // まず "MEM1" フィールドの位置を取得
- mcnt = WL_countCsvField( sp );
- #ifdef DEBUG
- printf("WL_countCsvField( %x ) = %d\n", sp, mcnt);
- #endif
-
- // `,"MEM1"'フィールドが無かったので何もせず終了
- if ( mcnt < 0 ){
- return ERROR;
- }
- // とりあえず2倍の容量のワークバッファを取っておく
- tsize = ( ((termSize * 2) / 1024)+1) * 1024;
- if ( (tmpBuf=TL_mallocMemory(GV_apliLot, tsize)) == NULL ){
- #ifdef DEBUG
- printf("WL_convText2Buf(%s): Can't malloc!\n", tsize);
- #endif
- return ERROR;
- }
- dp = (char *)tmpBuf;
-
- for ( page=0,flag=0; flag==0; ){
- sp2 = WL_searchCsvField( sp, mcnt );
- #ifdef DEBUG
- printf("WL_searchCsvField( %x, %d ) = %x\n", sp, mcnt, sp2);
- #endif
- // フィールドが有ったなら
- if ( sp2 != NULL ){
- sp = sp2;
- // ちゃんと `"'で始まっているなら
- if ( *(unsigned char *)(sp) == 0x22 ){
- sp++;
- // 二行目からは改頁を入れる
- if ( page>0 ){
- *(unsigned char *)(dp++) = 0x0c;
- }
- page++;
- // フィールド末までワークバッファに転送
- for ( flag2=0; flag2==0; sp++ ){
- d = *(unsigned char *)(sp);
- switch ( d ){
- // 改行記号の時
- case 0x1f:
- *(unsigned char *)(dp++) = 0x0d;
- *(unsigned char *)(dp++) = 0x0a;
- break;
- // 2byte半角英数字の時(EB9F~EBFC)
- case 0x0eb:
- d2 = *(unsigned char *)(++sp);
- if ( d2==0x9f ){ // `>'
- *(unsigned char *)(dp++)= '>';
- } else if ( d2==0xa0 ){ // `<'
- *(unsigned char *)(dp++)= '<';
- } else if ( d2>=0x0ae && d2<=0x0b7 ){ // `0'~`9'
- *(unsigned char *)(dp++)= d2 - 0x0ae + '0';
- } else if ( d2>=0x0b8 && d2<=0x0be ){ // `10'~`16'
- *(unsigned char *)(dp++)= '1';
- *(unsigned char *)(dp++)= d2 - 0x0b8 + '0';
- } else if ( d2>=0x0bf && d2<=0x0d8 ){ // `A'~`Z'
- *(unsigned char *)(dp++)= d2 - 0x0bf + 'A';
- } else if ( d2>=0x0df && d2<=0x0f8 ){ // `a'~`z'
- *(unsigned char *)(dp++)= d2 - 0x0df + 'a';
- } else if ( d2==0xd9 ){ // `※'
- *(unsigned char *)(dp++)= 0x81;
- *(unsigned char *)(dp++)= 0x0a6;
- } else if ( d2>=0x0da && d2<=0x0dd ){ // `ヽヾゝ〃'
- *(unsigned char *)(dp++)= 0x81;
- *(unsigned char *)(dp++)= d2 - (0x0da - 0x52);
- } else if ( d2==0x0f9 ){ // `〒'
- *(unsigned char *)(dp++)= 0x81;
- *(unsigned char *)(dp++)= 0x0a7;
- } else if ( d2>=0x0fa && d2<=0x0fc ){ // `仝々〆'
- *(unsigned char *)(dp++)= 0x81;
- *(unsigned char *)(dp++)= d2 - (0x0fa - 0x56);
- } else { // その他
- *(unsigned char *)(dp++)= d;
- *(unsigned char *)(dp++)= d2;
- }
- break;
- // 2byte半角かな文字の時(EC40~ECF5)
- case 0x0ec:
- d2 = *(unsigned char *)(++sp);
- if ( d2>=0x40 && d2<=0x7e ){ // `ぁ'~`み'
- *(unsigned char *)(dp++)= 0x82;
- *(unsigned char *)(dp++)= d2 + (0x9f - 0x40);
- } else if ( d2>=0x80 && d2<=0x93 ){ // `む'~`ん'
- *(unsigned char *)(dp++)= 0x82;
- *(unsigned char *)(dp++)= d2 + (0x0de - 0x80);
- } else if ( d2>=0x9f && d2<=0x0dd ){ // `ァ'~`ミ'
- *(unsigned char *)(dp++)= 0x83;
- *(unsigned char *)(dp++)= d2 - (0x09f - 0x40);
- } else if ( d2>=0x0de && d2<=0x0f4 ){ // `ム'~`ヶ'
- *(unsigned char *)(dp++)= 0x83;
- *(unsigned char *)(dp++)= d2 - (0x0de - 0x80);
- } else if ( d2==0x0f5 ){ // `ー'
- *(unsigned char *)(dp++)= 0x81;
- *(unsigned char *)(dp++)= 0x5b;
- } else { // その他
- *(unsigned char *)(dp++)= d;
- *(unsigned char *)(dp++)= d2;
- }
- break;
-
- // `"'の時
- case 0x22:
- d = *(unsigned char *)(sp +1);
- // `,'か`\n' か 0x1a なら終了
- if ( d==0x2c || d==0x0d || d==0x1a ){
- flag2=1;
- if ( d==0x1a ){
- flag=1;
- }
- } else {
- *(unsigned char *)(dp)= d;
- dp++;
- }
- break;
- // 通常の文字の場合
- default:
- *(unsigned char *)(dp++)= d;
- // 漢字の先頭バイトだったら次の文字も
- if (((d)>0x080 && (d)<0x0A0)||((d)>0xDF && (d)<0x0FD)){
- d2 = *(unsigned char *)(sp+1);
- if ( d2!=0 && d2!=0x22 ){
- *(unsigned char *)(dp++)= d2;
- sp++;
- }
- }
- break;
- }
- }
- *(unsigned char *)(dp) = 0;
- }
- } else {
- // バッファ末なので終了
- flag = 1;
- }
- }
- // (strlenで文字数を計る為)
- *(unsigned char *)(dp) = 0;
-
- // 古いバッファをpurge
- TL_freeMemory(termBuf, termBufSize);
-
- termBufSize = tsize;
- termSize = strlen(tmpBuf);
- termBuf = tmpBuf;
- #ifdef DEBUG
- printf("WL_convCsv2Text(): %x %d\n", termBuf, termSize);
- #endif
-
- #ifdef DEBUG
- FILE *fp;
- if ( (fp=EIN_fopen("g:csv2text.$$$","wb")) != (FILE *)NULL ){
- fwrite( termBuf, termSize, 1, fp );
- }
- fclose( fp );
- #endif
-
- return NOERR;
- }
-